package main

import "fmt"

/*
Go中不同数据类型的默认零值不同
bool的零值是false ，number的零值是0 ，string的零值是""，slice map channel interface function 的零值是nill
*/

func main() {
	//slice
	var slice1 []string //只声明的为nil slice
	if slice1 == nil {
		fmt.Println("slice1 is nil")
	}
	slice2 := make([]string, 0) //声明了并指定某个长度为0的内存空间地址，叫做empty slice
	if slice2 == nil {
		fmt.Println("slice2 is nil")
	} else {
		fmt.Println("slice2 is not nil")
	}

	//map
	var map1 map[string]int //nil map
	if map1 == nil {
		fmt.Println("map1 is nil")
	}
	var map2 = make(map[string]int) // empty map
	if map2 == nil {
		fmt.Println("map2 is nil")
	} else {
		fmt.Println("map2 is not nil")
	}

	//nil 类型的map和slice不能直接赋值，赋值会抛出painc异常，所以一般定义时都使用make
}
